﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web.UI.WebControls;
using Rezepto.Account;
using Rezepto.DatenbankObjekte;
using Rezepto.DatenbankVerbindung;
using Rezepto.Enum;

namespace Rezepto
{
    public partial class AdminBereich : LoginPage
    {
        public List<Benutzer> BenutzerList { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsLoggedIn() != null && IsLoggedIn().Rolle == Rolle.Administrator)
            {
                AdminArea.Visible = true;
                ForbiddenArea.Visible = false;
                BenutzerList = MsSqlVerbindung.GetAllUsers();
                BuildUserTableHeader();
                BuildUserTableContent();
            }
            else
            {
                ForbiddenArea.Visible = true;
            }
        }

        private void BuildUserTableContent()
        { 
            foreach (var benutzer in BenutzerList)
            {
                var benutzerRow = new TableRow();
                var idCell = new TableCell();
                var benutzernameCell = new TableCell();
                var vornameCell = new TableCell();
                var nachnameCell = new TableCell();
                var aktivCell = new TableCell();
                var aktivCheckBox = new CheckBox();
                idCell.Text = benutzer.Id.ToString();
                benutzernameCell.Text = benutzer.Benutzername;
                vornameCell.Text = benutzer.Vorname;
                nachnameCell.Text = benutzer.Nachname;

                benutzerRow.Cells.Add(idCell);
                benutzerRow.Cells.Add(benutzernameCell);
                benutzerRow.Cells.Add(vornameCell);
                benutzerRow.Cells.Add(nachnameCell);
                aktivCheckBox.Checked = benutzer.IsAktiv;
                if (IsLoggedIn().Benutzername == benutzernameCell.Text)
                {
                    aktivCheckBox.Enabled = false;
                }
                aktivCell.Controls.Add(aktivCheckBox);
                benutzerRow.Cells.Add(aktivCell);
                
                BenutzerTabelle.Rows.Add(benutzerRow);
            }
        }

        private void BuildUserTableHeader()
        {
            var idCell = new TableHeaderCell();
            idCell.Text = "ID";
            var benutzernameCell = new TableHeaderCell();
            benutzernameCell.Text = "Benutzername";
            var vornameCell = new TableHeaderCell();
            vornameCell.Text = "Vorname";
            var nachnameCell = new TableHeaderCell();
            nachnameCell.Text = "Nachname";
            var aktivCell = new TableHeaderCell();
            aktivCell.Text = "Aktiv";
            BenutzerHeader.Cells.Add(idCell);
            BenutzerHeader.Cells.Add(benutzernameCell);
            BenutzerHeader.Cells.Add(vornameCell);
            BenutzerHeader.Cells.Add(nachnameCell);
            BenutzerHeader.Cells.Add(aktivCell);
            BenutzerHeader.BackColor = Color.CornflowerBlue;
            BenutzerTabelle.Rows.AddAt(0, BenutzerHeader);
        }

        protected void UserDeaktivieren(object sender, EventArgs e)
        {
            foreach (TableRow row in BenutzerTabelle.Rows)
            {
                if (row is TableHeaderRow)
                    continue;
                var aktiveCheckBox = (row.Cells[4].Controls[0] as CheckBox);
                var benutzer = BenutzerList.Single(bn => bn.Id == Convert.ToInt16(row.Cells[0].Text));
                if (benutzer.IsAktiv != aktiveCheckBox.Checked)
                {
                    int aktiv = aktiveCheckBox.Checked ? 1 : 0;
                    MsSqlVerbindung.UserAktivierenDeaktivieren(Convert.ToInt16(row.Cells[0].Text), aktiv);
                }
            }
            Response.Redirect("~\\AdminBereich.aspx");
        }
    }
}